package com.huangyi;

public class Main {
    public static void main(String[] args) {
        // 测试用例
    }

    // 最长公共前缀
    static class Solution {
        public String longestCommonPrefix(String[] strs) {
            // 1) 边界处理
            if (strs == null || strs.length == 0) return "";

            // 2) 纵向扫描：以第一个字符串为基准，逐列检查
            for (int i = 0; i < strs[0].length(); i++) {
                char ch = strs[0].charAt(i);
                // 与其余字符串在第 i 位统一比较
                for (int j = 1; j < strs.length; j++) {
                    // 越界或字符不等：i 之前均为公共前缀
                    if (i >= strs[j].length() || strs[j].charAt(i) != ch) {
                        return strs[0].substring(0, i);
                    }
                }
            }
            // 3) 基准串完全通过：它本身就是最长公共前缀
            return strs[0];
        }
    }

    // 最长回文子串
    static class Solution2 {
        public String longestPalindrome(String s) {
            int n = s.length();
            if (n < 2) return s; // 长度为 0/1，自己就是最长回文

            int begin = 0, len = 1; // 至少有 1 个字符时，单字符是回文
            for (int i = 0; i < n; i++) {
                // 奇数中心 (i, i)
                int l = i, r = i;
                while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) { l--; r++; }
                if (r - l - 1 > len) {
                    begin = l + 1;
                    len = r - l - 1;
                }

                // 偶数中心 (i, i+1)
                l = i; r = i + 1;
                while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) { l--; r++; }
                if (r - l - 1 > len) {
                    begin = l + 1;
                    len = r - l - 1;
                }
            }
            return s.substring(begin, begin + len);
        }
    }
}
